/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * DigitacaoPrecosView.java
 *
 * Created on 17/05/2011, 16:47:19
 */

package br.com.comprasPublicas.view.cadastro;

import br.com.comprasPublicas.view.pesquisa.PesquisaCotacaoView;
import br.com.comprasPublicas.dao.DAOGenerico;
import br.com.comprasPublicas.entity.Cotacao;
import br.com.comprasPublicas.entity.InclusaoPrecosCotacao;
import br.com.comprasPublicas.entity.ItemPedido;
import br.com.comprasPublicas.entity.Pessoa;
import br.com.comprasPublicas.entity.Produto;
import br.com.comprasPublicas.util.ConexaoReport;
import br.com.comprasPublicas.util.HibernateUtil;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.sql.Connection;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.view.JasperViewer;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;

/**
 *
 * @author COMPRAS
 */
public class DigitacaoPrecosView extends javax.swing.JFrame {

    /** Creates new form DigitacaoPrecosView */
    public DigitacaoPrecosView() {
        initComponents();
        preencher_tblFornecedores();
        preencher_tblProduto();
        btnConsultar.requestFocus();
        tblFornecedores.setSelectionMode(0);
        tblProduto.setSelectionMode(0);

        

        

        //Abaixo, método utilizado para centralizar o JFrame na tela
        Dimension tela = Toolkit.getDefaultToolkit().getScreenSize();
        this.setLocation((tela.width - this.getSize().width) / 2, (tela.height - this.getSize().height) / 2);
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jLabel1 = new javax.swing.JLabel();
        jPanel4 = new javax.swing.JPanel();
        btnVoltar = new javax.swing.JButton();
        jPanel3 = new javax.swing.JPanel();
        jLabel4 = new javax.swing.JLabel();
        txtItem = new javax.swing.JTextField();
        jLabel5 = new javax.swing.JLabel();
        btnOk = new javax.swing.JButton();
        ftxtValor = new javax.swing.JFormattedTextField();
        jLabel2 = new javax.swing.JLabel();
        jPanel1 = new javax.swing.JPanel();
        jLabel3 = new javax.swing.JLabel();
        txtCotacao = new javax.swing.JTextField();
        jScrollPane1 = new javax.swing.JScrollPane();
        tblFornecedores = new javax.swing.JTable();
        jPanel2 = new javax.swing.JPanel();
        btnConsultar = new javax.swing.JButton();
        btnConcluir = new javax.swing.JButton();
        btnImprimir = new javax.swing.JButton();
        txtFinalizado = new javax.swing.JLabel();
        txtPendente = new javax.swing.JLabel();
        jScrollPane2 = new javax.swing.JScrollPane();
        tblProduto = new javax.swing.JTable();

        org.jdesktop.application.ResourceMap resourceMap = org.jdesktop.application.Application.getInstance(br.com.comprasPublicas.compraspublicas.ComprasPublicasApp.class).getContext().getResourceMap(DigitacaoPrecosView.class);
        jLabel1.setText(resourceMap.getString("jLabel1.text")); // NOI18N
        jLabel1.setName("jLabel1"); // NOI18N

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setLocationByPlatform(true);
        setName("Form"); // NOI18N
        setResizable(false);
        setUndecorated(true);
        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowActivated(java.awt.event.WindowEvent evt) {
                formWindowActivated(evt);
            }
        });

        jPanel4.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));
        jPanel4.setName("jPanel4"); // NOI18N

        btnVoltar.setFont(resourceMap.getFont("jButton5.font")); // NOI18N
        btnVoltar.setMnemonic('v');
        btnVoltar.setText(resourceMap.getString("btnVoltar.text")); // NOI18N
        btnVoltar.setName("btnVoltar"); // NOI18N
        btnVoltar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnVoltarActionPerformed(evt);
            }
        });

        jPanel3.setBorder(javax.swing.BorderFactory.createTitledBorder(resourceMap.getString("jPanel3.border.title"))); // NOI18N
        jPanel3.setName("jPanel3"); // NOI18N

        jLabel4.setText(resourceMap.getString("jLabel4.text")); // NOI18N
        jLabel4.setName("jLabel4"); // NOI18N

        txtItem.setText(resourceMap.getString("txtItem.text")); // NOI18N
        txtItem.setEnabled(false);
        txtItem.setName("txtItem"); // NOI18N

        jLabel5.setText(resourceMap.getString("jLabel5.text")); // NOI18N
        jLabel5.setName("jLabel5"); // NOI18N

        btnOk.setFont(resourceMap.getFont("btnOk.font")); // NOI18N
        btnOk.setMnemonic('o');
        btnOk.setText(resourceMap.getString("btnOk.text")); // NOI18N
        btnOk.setEnabled(false);
        btnOk.setName("btnOk"); // NOI18N
        btnOk.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnOkActionPerformed(evt);
            }
        });

        ftxtValor.setText(resourceMap.getString("ftxtValor.text")); // NOI18N
        ftxtValor.setEnabled(false);
        ftxtValor.setName("ftxtValor"); // NOI18N

        javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3);
        jPanel3.setLayout(jPanel3Layout);
        jPanel3Layout.setHorizontalGroup(
            jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel3Layout.createSequentialGroup()
                .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanel3Layout.createSequentialGroup()
                        .addComponent(jLabel4)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(txtItem, javax.swing.GroupLayout.DEFAULT_SIZE, 207, Short.MAX_VALUE))
                    .addGroup(jPanel3Layout.createSequentialGroup()
                        .addComponent(jLabel5)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(ftxtValor, javax.swing.GroupLayout.PREFERRED_SIZE, 89, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(btnOk, javax.swing.GroupLayout.PREFERRED_SIZE, 53, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addContainerGap())
        );
        jPanel3Layout.setVerticalGroup(
            jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel3Layout.createSequentialGroup()
                .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel4)
                    .addComponent(txtItem, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel5)
                    .addComponent(btnOk)
                    .addComponent(ftxtValor, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
        );

        jLabel2.setFont(resourceMap.getFont("jLabel2.font")); // NOI18N
        jLabel2.setText(resourceMap.getString("jLabel2.text")); // NOI18N
        jLabel2.setName("jLabel2"); // NOI18N

        jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder(resourceMap.getString("jPanel1.border.title"))); // NOI18N
        jPanel1.setName("jPanel1"); // NOI18N

        jLabel3.setText(resourceMap.getString("jLabel3.text")); // NOI18N
        jLabel3.setName("jLabel3"); // NOI18N

        txtCotacao.setText(resourceMap.getString("txtCotacao.text")); // NOI18N
        txtCotacao.setEnabled(false);
        txtCotacao.setName("txtCotacao"); // NOI18N
        txtCotacao.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusLost(java.awt.event.FocusEvent evt) {
                txtCotacaoFocusLost(evt);
            }
        });

        jScrollPane1.setName("jScrollPane1"); // NOI18N

        tblFornecedores.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "Cod.Forn", "Fornecedor"
            }
        ));
        tblFornecedores.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_ALL_COLUMNS);
        tblFornecedores.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
        tblFornecedores.setDropMode(javax.swing.DropMode.ON);
        tblFornecedores.setName("tblFornecedores"); // NOI18N
        tblFornecedores.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_INTERVAL_SELECTION);
        tblFornecedores.getTableHeader().setResizingAllowed(false);
        tblFornecedores.getTableHeader().setReorderingAllowed(false);
        tblFornecedores.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                tblFornecedoresMouseClicked(evt);
            }
        });
        jScrollPane1.setViewportView(tblFornecedores);

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addComponent(jLabel3)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(txtCotacao, javax.swing.GroupLayout.PREFERRED_SIZE, 48, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(453, 453, 453))
            .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 545, Short.MAX_VALUE)
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel3)
                    .addComponent(txtCotacao, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 102, Short.MAX_VALUE))
        );

        jPanel2.setBorder(javax.swing.BorderFactory.createEtchedBorder());
        jPanel2.setName("jPanel2"); // NOI18N

        btnConsultar.setFont(resourceMap.getFont("btnConsultar.font")); // NOI18N
        btnConsultar.setMnemonic('n');
        btnConsultar.setText(resourceMap.getString("btnConsultar.text")); // NOI18N
        btnConsultar.setName("btnConsultar"); // NOI18N
        btnConsultar.setNextFocusableComponent(txtCotacao);
        btnConsultar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnConsultarActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
        jPanel2.setLayout(jPanel2Layout);
        jPanel2Layout.setHorizontalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel2Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(btnConsultar, javax.swing.GroupLayout.DEFAULT_SIZE, 141, Short.MAX_VALUE)
                .addContainerGap())
        );
        jPanel2Layout.setVerticalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(btnConsultar)
        );

        btnConcluir.setFont(resourceMap.getFont("btnConcluir.font")); // NOI18N
        btnConcluir.setForeground(resourceMap.getColor("btnConcluir.foreground")); // NOI18N
        btnConcluir.setMnemonic('o');
        btnConcluir.setText(resourceMap.getString("btnConcluir.text")); // NOI18N
        btnConcluir.setToolTipText(resourceMap.getString("btnConcluir.toolTipText")); // NOI18N
        btnConcluir.setEnabled(false);
        btnConcluir.setName("btnConcluir"); // NOI18N
        btnConcluir.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnConcluirActionPerformed(evt);
            }
        });

        btnImprimir.setFont(resourceMap.getFont("btnImprimir.font")); // NOI18N
        btnImprimir.setMnemonic('p');
        btnImprimir.setText(resourceMap.getString("btnImprimir.text")); // NOI18N
        btnImprimir.setEnabled(false);
        btnImprimir.setName("btnImprimir"); // NOI18N
        btnImprimir.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnImprimirActionPerformed(evt);
            }
        });

        txtFinalizado.setFont(resourceMap.getFont("txtFinalizado.font")); // NOI18N
        txtFinalizado.setForeground(resourceMap.getColor("txtFinalizado.foreground")); // NOI18N
        txtFinalizado.setText(resourceMap.getString("txtFinalizado.text")); // NOI18N
        txtFinalizado.setName("txtFinalizado"); // NOI18N

        txtPendente.setFont(resourceMap.getFont("txtPendente.font")); // NOI18N
        txtPendente.setForeground(resourceMap.getColor("txtPendente.foreground")); // NOI18N
        txtPendente.setText(resourceMap.getString("txtPendente.text")); // NOI18N
        txtPendente.setName("txtPendente"); // NOI18N

        jScrollPane2.setName("jScrollPane2"); // NOI18N

        tblProduto.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "Cod.", "Produto", "Quantidade", "Unid.", "Valor Unit.", "Valor Total"
            }
        ));
        tblProduto.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_ALL_COLUMNS);
        tblProduto.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
        tblProduto.setName("tblProduto"); // NOI18N
        tblProduto.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_INTERVAL_SELECTION);
        tblProduto.getTableHeader().setResizingAllowed(false);
        tblProduto.getTableHeader().setReorderingAllowed(false);
        tblProduto.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                tblProdutoMouseClicked(evt);
            }
        });
        tblProduto.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusLost(java.awt.event.FocusEvent evt) {
                tblProdutoFocusLost(evt);
            }
        });
        jScrollPane2.setViewportView(tblProduto);

        javax.swing.GroupLayout jPanel4Layout = new javax.swing.GroupLayout(jPanel4);
        jPanel4.setLayout(jPanel4Layout);
        jPanel4Layout.setHorizontalGroup(
            jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel4Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanel4Layout.createSequentialGroup()
                        .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jPanel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
                    .addComponent(jLabel2)
                    .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                        .addComponent(txtPendente)
                        .addGroup(jPanel4Layout.createSequentialGroup()
                            .addComponent(txtFinalizado)
                            .addGap(121, 121, 121)
                            .addComponent(btnImprimir)
                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                            .addComponent(btnConcluir, javax.swing.GroupLayout.PREFERRED_SIZE, 218, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                            .addComponent(btnVoltar))
                        .addComponent(jScrollPane2)))
                .addContainerGap())
        );
        jPanel4Layout.setVerticalGroup(
            jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel4Layout.createSequentialGroup()
                .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                    .addGroup(jPanel4Layout.createSequentialGroup()
                        .addContainerGap()
                        .addComponent(jLabel2)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED))
                    .addGroup(jPanel4Layout.createSequentialGroup()
                        .addGap(56, 56, 56)
                        .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(17, 17, 17)))
                .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 219, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(txtFinalizado)
                    .addComponent(btnImprimir)
                    .addComponent(btnConcluir)
                    .addComponent(btnVoltar))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(txtPendente)
                .addContainerGap(14, Short.MAX_VALUE))
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jPanel4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(491, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addComponent(jPanel4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(107, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void tblFornecedoresMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_tblFornecedoresMouseClicked
        pessoa = listaPessoa.get(tblFornecedores.getSelectedRow());
        listaProduto = new ArrayList<InclusaoPrecosCotacao>();
        listaItemProduto = new ArrayList<Produto>();
        preenche_tblItens();
        txtItem.setText("");
        ftxtValor.setText("");
        ftxtValor.setEnabled(false);
}//GEN-LAST:event_tblFornecedoresMouseClicked

    private void tblProdutoMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_tblProdutoMouseClicked
        inclusaoPrecosCotacao = listaProduto.get(tblProduto.getSelectedRow());
        txtItem.setText(inclusaoPrecosCotacao.getItem_pedido().getProduto().getNome());
        valorUnit = 0.0;
        quantidade = 0.0;
        valorTotal = 0.0;
        valorUnit = inclusaoPrecosCotacao.getValor_unitario();
        quantidade = inclusaoPrecosCotacao.getItem_pedido().getQuantidade();
        ftxtValor.setText(valorUnit.toString());
        ftxtValor.setEnabled(true);
        btnOk.setEnabled(true);
        btnConcluir.setEnabled(true);
      
        
}//GEN-LAST:event_tblProdutoMouseClicked

    private void tblProdutoFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_tblProdutoFocusLost

}//GEN-LAST:event_tblProdutoFocusLost

    private void btnConsultarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnConsultarActionPerformed
        limpa_objetos();


        Object[] options = { "Todas as Cotações", "Cotações Não Finalizadas" };
        int opcao = JOptionPane.showOptionDialog(
            null,
            "Escolha a opção para busca das Cotações",
            "Cotações",
        JOptionPane.DEFAULT_OPTION,
        JOptionPane.WARNING_MESSAGE,
            null,
            options,
            options[0]);

        if (opcao == 0) {
            tipoConsulta = "a";
            if (pesquisaCotacaoView == null) {
                PesquisaCotacaoView frame = new PesquisaCotacaoView(this, rootPaneCheckingEnabled);
                frame.setVisible(true);
            }
        }
        else if (opcao== 1){
            tipoConsulta = "b";
            if (pesquisaCotacaoView == null) {
                PesquisaCotacaoView frame = new PesquisaCotacaoView(this, rootPaneCheckingEnabled);
                frame.setVisible(true);
            }
        }
        //txtCotacao.setEnabled(true);
        //txtCotacao.requestFocus();
    }//GEN-LAST:event_btnConsultarActionPerformed

    private void txtCotacaoFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_txtCotacaoFocusLost
        cotacao = new Cotacao();
        List<Cotacao> lista = new ArrayList();
        lista = lista_cotacao();
        int tamanho_lista = lista.size();
        if (tamanho_lista != 0){
            for(int i = 0; i < tamanho_lista;i++)
            {
                cotacao = lista.get(i);
            }
        }
        if (cotacao.getValor_totalCotacao()!=0.0) 
        {
            txtFinalizado.setForeground(Color.black);
            btnImprimir.setEnabled(true);
        }
        else
        {
            txtPendente.setForeground(Color.black);
        }
        List<InclusaoPrecosCotacao> lista_itens = new ArrayList();
        lista_itens = lista_inclusaoFornecedores();
    }//GEN-LAST:event_txtCotacaoFocusLost

    private void btnOkActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnOkActionPerformed
        valorUnit = Double.parseDouble(ftxtValor.getText());
        valorTotal = valorUnit * quantidade;
        inclusaoPrecosCotacao.setValor_unitario(valorUnit);
        inclusaoPrecosCotacao.setValor_total(valorTotal);
        atualizar_precosItens();
        preenche_tblItens();

    }//GEN-LAST:event_btnOkActionPerformed

    private void btnConcluirActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnConcluirActionPerformed
        calcular_vencedor();
    }//GEN-LAST:event_btnConcluirActionPerformed

    private void formWindowActivated(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowActivated
        if (cot != null) {
            String cotacaoId=cot;
            txtCotacao.setText(cotacaoId);
            txtCotacao.requestFocus();
            txtCotacao.lostFocus(null,evt);
            tblFornecedores.requestFocus();

            cot = null;
        }
    }//GEN-LAST:event_formWindowActivated

    private void btnVoltarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnVoltarActionPerformed
        Object[] options = { "Sim", "Não" };
        int opcao = JOptionPane.showOptionDialog(
            null,
            "Deseja sair da tela de Digitação de Preços?",
            "Saída de Tela",
        JOptionPane.DEFAULT_OPTION,
        JOptionPane.WARNING_MESSAGE,
            null,
            options,
            options[0]);

        if (opcao == 0) {
            limpa_objetos();
            this.dispose();
        }
    }//GEN-LAST:event_btnVoltarActionPerformed

    private void btnImprimirActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnImprimirActionPerformed
        imprimi_mapa();
    }//GEN-LAST:event_btnImprimirActionPerformed

    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new DigitacaoPrecosView().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnConcluir;
    private javax.swing.JButton btnConsultar;
    private javax.swing.JButton btnImprimir;
    private javax.swing.JButton btnOk;
    private javax.swing.JButton btnVoltar;
    private javax.swing.JFormattedTextField ftxtValor;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JPanel jPanel3;
    private javax.swing.JPanel jPanel4;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JTable tblFornecedores;
    private javax.swing.JTable tblProduto;
    private javax.swing.JTextField txtCotacao;
    private javax.swing.JLabel txtFinalizado;
    private javax.swing.JTextField txtItem;
    private javax.swing.JLabel txtPendente;
    // End of variables declaration//GEN-END:variables

    public void preencher_tblFornecedores()
    {
        tblFornecedores.getColumnModel().getColumn(0).setPreferredWidth(10);
        tblFornecedores.getColumnModel().getColumn(1).setPreferredWidth(313);
    }
    public void preencher_tblProduto()
    {
        tblProduto.getColumnModel().getColumn(0).setPreferredWidth(1);
        tblProduto.getColumnModel().getColumn(1).setPreferredWidth(250);
        tblProduto.getColumnModel().getColumn(2).setPreferredWidth(1);
        tblProduto.getColumnModel().getColumn(3).setPreferredWidth(5);
        tblProduto.getColumnModel().getColumn(4).setPreferredWidth(5);
        tblProduto.getColumnModel().getColumn(5).setPreferredWidth(15);
    }

    private void limpa_objetos(){
        listaInclusaoPrecos.removeAll(listaInclusaoPrecos);
        listaItemProduto.removeAll(listaItemProduto);
        listaPessoa.removeAll(listaPessoa);
        listaProduto.removeAll(listaProduto);
        //Deixando os ambos os Jtexts abaixo invisível
        txtFinalizado.setForeground(new java.awt.Color(240, 240, 240));
        txtPendente.setForeground(new java.awt.Color(240, 240, 240));
        btnImprimir.setEnabled(false);
        btnConcluir.setEnabled(false);
        btnOk.setEnabled(false);
        ftxtValor.setEnabled(false);
        ftxtValor.setText("");
        txtItem.setText("");
        DefaultTableModel modelo_tblFornecedores = (DefaultTableModel) tblFornecedores.getModel();
        modelo_tblFornecedores.setNumRows(0);
        DefaultTableModel modelo_tblProdutos = (DefaultTableModel) tblProduto.getModel();
        modelo_tblProdutos.setNumRows(0);
    }

    private List<Cotacao> lista_cotacao() {
        Session sessao = HibernateUtil.getSessao();
        Transaction transacao = sessao.beginTransaction();
        Query query = sessao.createQuery("from Cotacao where id_cotacao = :id_cot");
        query.setString("id_cot", txtCotacao.getText());

        List cotacaoList = query.list();

        if(cotacaoList.isEmpty()){
            txtCotacao.setText("");
            JOptionPane.showMessageDialog(null, "Não existe esta Cotação!");
        }
        transacao.commit();
        sessao.close();
        return cotacaoList;
    }

    private List<InclusaoPrecosCotacao> lista_inclusaoFornecedores() {
        Session sessao = HibernateUtil.getSessao();
        Transaction transacao = sessao.beginTransaction();

        //Utilizando criteria para instanciar ItemPedido.class
        Criteria crit = sessao.createCriteria(InclusaoPrecosCotacao.class);
        Cotacao cotacaoBusca = cotacao;

        //Buscando conforme restrição
        crit.add(Restrictions.like("cotacao", cotacaoBusca));
        List lista = crit.list();

        inclusaoPrecosCotacao = new InclusaoPrecosCotacao();

        DefaultTableModel modelo_tbl = (DefaultTableModel) tblFornecedores.getModel();
        modelo_tbl.setNumRows(0);

        //Preechendo a tabela de fornecedores
        int tamanho_lista = lista.size();
        for (int i=0; i<tamanho_lista; i++)
        {
            inclusaoPrecosCotacao = (InclusaoPrecosCotacao) lista.get(i);

            //adicionando uma lista de todos as "InclusaoPrecosCotacao"
            listaInclusaoPrecos.add(inclusaoPrecosCotacao);

            //Verificar se já existe o fornecedor a ser acrescentado na tabela
            int idPessoaBuscada = inclusaoPrecosCotacao.getPessoa().getId_pessoa();
            int tamanho_tabela_fornecedor = modelo_tbl.getRowCount();
            for (int j=0; j<tamanho_tabela_fornecedor; j++){
                if (idPessoaBuscada == modelo_tbl.getValueAt(j, 0)){
                    fornExistente = true;
                }
            }
            //Incluir somente os fornecedores que ainda não foram inclusos na tabela
            if (fornExistente == false){
                listaPessoa.add(inclusaoPrecosCotacao.getPessoa());
                modelo_tbl.addRow(new Object[]{inclusaoPrecosCotacao.getPessoa().getId_pessoa(),
                                               inclusaoPrecosCotacao.getPessoa().getNome_razao_soc()
                                            });
            }
            fornExistente = false;
        }
        transacao.commit();
        sessao.close();
        return listaInclusaoPrecos;
    }

    private void preenche_tblItens() {
        Session sessao = HibernateUtil.getSessao();
        Transaction transacao = sessao.beginTransaction();

        //Utilizando criteria para instanciar ItemPedido.class
        Criteria crit = sessao.createCriteria(InclusaoPrecosCotacao.class);
        Cotacao cotacaoBusca = cotacao;
        Pessoa pessoaBusca = pessoa;

        //Buscando conforme restrição
        crit.add(Restrictions.like("cotacao", cotacaoBusca));
        crit.add(Restrictions.like("pessoa", pessoaBusca));
        List lista2 = crit.list();

        inclusaoPrecosCotacao = new InclusaoPrecosCotacao();

        DefaultTableModel modelo_tblProdutos = (DefaultTableModel) tblProduto.getModel();
        modelo_tblProdutos.setNumRows(0);

        //Preechendo a tabela de Produtos
        int tamanho_lista = lista2.size();
        for (int i=0; i<tamanho_lista; i++)
        {
            inclusaoPrecosCotacao = (InclusaoPrecosCotacao) lista2.get(i);

            listaInclusaoPrecos.add(inclusaoPrecosCotacao);
            listaProduto.add(inclusaoPrecosCotacao);
            listaItemProduto.add(inclusaoPrecosCotacao.getItem_pedido().getProduto());
            modelo_tblProdutos.addRow(new Object[]{inclusaoPrecosCotacao.getItem_pedido().getProduto().getId_produto(),
                                           inclusaoPrecosCotacao.getItem_pedido().getProduto().getNome(),
                                           inclusaoPrecosCotacao.getItem_pedido().getQuantidade(),
                                           inclusaoPrecosCotacao.getItem_pedido().getUnidade(),
                                           inclusaoPrecosCotacao.getValor_unitario(),
                                           inclusaoPrecosCotacao.getValor_total()
                                            });
        }
        transacao.commit();
        sessao.close();
    }

    private void atualizar_precosItens() {

        obj_inclusao = new DAOGenerico(inclusaoPrecosCotacao);

        try{
            obj_inclusao.atualizar();
            
        }catch(Exception e){
            JOptionPane.showMessageDialog(null, "Itens da cotação não puderam ser atualizados: " +e);
        }
        obj_inclusao = null;

    }

    /*
     * Este Método possui 3 laços de repetições, um dentro do outro.
     * O intuito deste método é calcular os vencedores para cada item da cotação,
     * declarando em cada item se para a "pessoa" o atributo "vencedor é "s" (sim)
     * ou "n" (não). Posteriomente é efetuada uma soma somente do valor total do
     * item que contem o menor valor.
     */
    private void calcular_vencedor() {
        Session sessao = HibernateUtil.getSessao();
        Transaction transacao = sessao.beginTransaction();

        //Utilizando criteria para instanciar ItemPedido.class
        Criteria crit = sessao.createCriteria(InclusaoPrecosCotacao.class);
        Cotacao cotacaoBusca = cotacao;

        //Buscando conforme restrição
        crit.add(Restrictions.like("cotacao", cotacaoBusca));
        List lista = crit.list();

        int tamanho_lista = lista.size();

        //Listando os produtos desta cotacao
        for (int i=0; i<tamanho_lista;i++){
            int tamanho_lista_produto = listaItemProduto.size();
            for (int k=0;k<tamanho_lista_produto;k++){
                Produto produtoBusca = listaItemProduto.get(k);
                Criteria crit2 = sessao.createCriteria(InclusaoPrecosCotacao.class).createAlias("item_pedido", "i");
                crit2.add(Restrictions.like("cotacao", cotacao));
                crit2.add(Restrictions.like("i.produto", produtoBusca));
                List lista2 = crit2.list();

                valorMinimo = 0.0;
                int tamanho_lista2 = lista2.size();
                for (int j=0;j<tamanho_lista2; j++){
                    inclusaoPrecosCotacao = (InclusaoPrecosCotacao) lista2.get(j);
                    //se for o primeiro produto analizado, o seu valor será o minimo
                    if (valorMinimo==0.0){
                        //testando se o item teve valor indicado
                        if (inclusaoPrecosCotacao.getValor_unitario() == 0.0){
                            //Caso não tenha indicado valor para este item não pode ser vencedor
                            inclusaoPrecosCotacao.setVencedor("n");
                        }
                        else{
                            valorMinimo = inclusaoPrecosCotacao.getValor_unitario();
                            inclusaoPrecosCotacao.setVencedor("s");
                        }
                    }
                    else if(inclusaoPrecosCotacao.getValor_unitario()<=valorMinimo){//quando descobrir metodo para desempatar mudar para "<"
                        //testando se o item teve valor indicado
                        if (inclusaoPrecosCotacao.getValor_unitario() == 0.0){
                            //Caso não tenha indicado valor para este item não pode ser vencedor
                            inclusaoPrecosCotacao.setVencedor("n");
                        }
                        else{
                            //indicando novo valor minimo para o produto
                            valorMinimo = inclusaoPrecosCotacao.getValor_unitario();
                            inclusaoPrecosCotacao.setVencedor("s");

                            //indicando false para o fornecedor vencedor anterior
                            for (int l=0; l<j; l++){
                               inclusaoPrecosCotacao = (InclusaoPrecosCotacao) lista2.get(l);
                               inclusaoPrecosCotacao.setVencedor("n");
                            }
                        }
                    }
                    else inclusaoPrecosCotacao.setVencedor("n");
                }
                try{
                    atualizar_precosItens();
                }catch(Exception ex){
                    JOptionPane.showMessageDialog(null, "Ocorreu Erro ao atualizar valores: " +ex);
                }
            }
            

        }
        //Deixando o texto de COTAÇÃO FINALIZADA visível
        txtFinalizado.setForeground(Color.black);
        //Deixando o texto de COTAÇÃO PENDENTE invisível
        txtPendente.setForeground(new java.awt.Color(240, 240, 240));
        btnImprimir.setEnabled(true);

        
        Criteria crit3 = sessao.createCriteria(InclusaoPrecosCotacao.class);
        crit3.add(Restrictions.like("cotacao", cotacao));
        crit3.add(Restrictions.like("vencedor", "s"));
        List lista3 = crit3.list();

        int tamanho_listaVencedores = lista3.size();
        for (int b=0; b<tamanho_listaVencedores; b++){
            inclusaoPrecosCotacao = (InclusaoPrecosCotacao) lista3.get(b);
            valorTotalCotacao += inclusaoPrecosCotacao.getValor_total();
        }

        cotacao.setValor_totalCotacao(valorTotalCotacao);
        obj_cotacao = new DAOGenerico(cotacao);
        atualiza_cotacao();

        transacao.commit();
        sessao.close();
        String excedido = "";
        if (valorTotalCotacao>8000.00){
            excedido = "<html>" + "<i>\""
                        + "ATENÇÃO: Esta cotação excedeu o limite de compra para modalidade DISPENSA DE LICITAÇÃO"
                        + "\"</i>" + "</html>";
        }
        JOptionPane.showMessageDialog(null, excedido + "\nEfetuado cálculo para menor preço por item\nValor Total da cotação é: R$"+valorTotalCotacao);
        valorTotalCotacao = 0.0;
    }
    

    private void atualiza_cotacao(){
        try{
            obj_cotacao.atualizar();
        }catch(Exception e){
            JOptionPane.showMessageDialog(null, "Erro ao atualizar Cotaçao de Preços: " +e);
        }
    }
    private void imprimi_mapa(){
        //sequência de métodos para imprimir a cotação
        Connection con = null;
        try {
            //cria a conexao com o banco de dados
            con = ConexaoReport.getConnection();
            //parametro para busca em relatorio Cotacao
            HashMap<String, Integer> parameterMap = new HashMap<String, Integer>();
            //buscando o id_cotacao para passar ao parametro
            Integer cotacaoId = cotacao.getId_cotacao();
            //nome do parametro e o valor é passado ao HashMap
            parameterMap.put("id_cotacao", cotacaoId);

            //PEGA O CAMINHO FISICO DO ARQUIVO .jasper
            String arquivo = "./report/MapaComparativo.jasper";

            //chama fillReport(caminho fisico, parametros, conexão)
            JasperPrint jp = JasperFillManager.fillReport(arquivo, parameterMap, con);

            //exibe o relatorio com o viewReport
            JasperViewer.viewReport(jp, false);

        }
        catch (Exception ex) {
            JOptionPane.showMessageDialog(null, "Erro em impressão de Relatorio: " +ex);
        }
        finally {
            try {
                if (!con.isClosed()) {
                    con.close();
                }
            } catch (Exception e) {
                JOptionPane.showMessageDialog(null, "Erro ao fechar conexão: " + e);
            }
        }
        
    }

    Double valorMinimo = 0.0;
    Double valorTotalCotacao = 0.0;
    private Pessoa pessoa;
    private List<InclusaoPrecosCotacao> listaProduto = new ArrayList<InclusaoPrecosCotacao>();
    private List<Pessoa> listaPessoa = new ArrayList<Pessoa>();
    private List<Produto> listaItemProduto = new ArrayList<Produto>();
    private List<InclusaoPrecosCotacao> listaInclusaoPrecos = new ArrayList<InclusaoPrecosCotacao>();
    private boolean fornExistente;
    private boolean produtoExistente;
    private Cotacao cotacao;
    private ItemPedido itemPedido;
    private InclusaoPrecosCotacao inclusaoPrecosCotacao;
    private DAOGenerico obj_inclusao;
    private DAOGenerico obj_cotacao;
    Double valorUnit = 0.0;
    Double valorTotal = 0.0;
    Double quantidade = 0.0;
    public static String cot=null;
    public static String tipoConsulta=null;
    public PesquisaCotacaoView pesquisaCotacaoView;




}
